<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      /*
      类型，构造函数，类
      1. 类型本质上就是判断变量或者值是哪个构造函数或者类创建new的
      */

      //constructor 判断数据类型
      
      class Person {}
      const p = new Person();
      function fn() {}
      // fn.constructor = {}
      // p.__proto__->Person.prototype
      // Person.prototype.constructor===Person
      console.log(p.constructor === Person); //true
      console.log([].constructor === Array); //true
      console.log({}.constructor === Object); //true
      console.log(fn.constructor === Function); //true
      console.log("abc".constructor === String); //true

      // 缺点：① 对没有构造函数的数据是无法判断的 ② constructor 是可写的，如果意外被修改，判断就失效了

      // null undefined
    </script>
  </body>
</html>
